Micron Document
`:top
`*`!Common Language Runtime`!`* (`!CLR`!) est le nom choisi par `F33f`_`[Microsoft`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft]`_`f pour le composant de `F33f`_`[machine virtuelle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Machine_virtuelle]`_`f du `*`F33f`_`[framework .NET`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Framework_.NET]`_`f`*. Il s'agit de l'implémentation par Microsoft du standard `*`F33f`_`[Common Language Infrastructure`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Common_Language_Infrastructure]`_`f`* (CLI) qui définit l'`F33f`_`[environnement d'exécution`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Environnement_d'exécution]`_`f des codes de programmes. Le CLR fait tourner une sorte de `F33f`_`[bytecode`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Bytecode]`_`f nommé `*`F33f`_`[Common Intermediate Language (CIL)`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Common_Intermediate_Language]`_`f`*. Le `F33f`_`[compilateur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilateur]`_`f à la volée transforme le code CIL en code natif spécifique au `F33f`_`[système d'exploitation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_d'exploitation]`_`f. Le CLR fonctionne sur des systèmes d'exploitation `F33f`_`[Microsoft Windows`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft_Windows]`_`f.

Le CLR est composé des quatre parties suivantes :

• `*`F33f`_`[Common Type System`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Common_Type_System]`_`f`* (CTS) ;
• `*Common Language Specification`* (CLS) ;
• `*Metadata`* ;
• `*Virtual Execution System`* (VES).

>>Contents

• `F0af`_`[Introduction`#introduction]`_`f
• `F0af`_`[Liste des langages pris en charge`#liste-des-langages-pris-en-charge]`_`f
• `F0af`_`[Voir aussi`#voir-aussi]`_`f
• `F0af`_`[Articles connexes`#articles-connexes]`_`f
• `F0af`_`[Notes et références`#notes-et-r-f-rences]`_`f
• `F0af`_`[Lien externe`#lien-externe]`_`f

-─

>>Introduction

Le CLR est à .NET ce que la `F33f`_`[JVM`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Machine_virtuelle_java]`_`f est à `F33f`_`[Java`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Java_(langage)]`_`f, c’est-à-dire une `F33f`_`[machine virtuelle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Machine_virtuelle]`_`f, sans laquelle l'exécution de code .NET ne serait pas possible. À l'inverse de son concurrent, le `*framework`* .NET a été conçu pour permettre l'interopérabilité entre différents langages.

Quel que soit le langage utilisé pour écrire une application .NET, le code doit être transformé en CIL (`*Common Intermediate Language`*). Ce code intermédiaire ne comporte aucune instruction relative au matériel (i.e. `*hardware`*) ou au système d'exploitation. Il ne peut donc pas être exécuté directement. Malgré cela, on pourrait tout à fait imaginer écrire directement une application en IL, langage qui ressemble à l'assembleur, sans passer par un langage de dernière génération comme le `F33f`_`[C#`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=C_sharp]`_`f.

Le CLR est nécessaire pour exécuter le code intermédiaire. Il est basé sur le CTS (`*Common Type System`*)`:cite-ref-1[`F5bf`_`[1`#cite-note-1]`_`f] et le CLS (`*Common Language Specification`*). Il apporte de nombreuses fonctionnalités comme le `F33f`_`[ramasse-miettes`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Ramasse-miettes_(informatique)]`_`f en `F33f`_`[anglais`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Anglais]`_`f : `*Garbage Collector`* (la mémoire utilisée par l'application lors de l'exécution est optimisée), la BCL (`F33f`_`[Base Class Library`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Base_Class_Library]`_`f), et le système de sécurité. Une fois le code présent dans le CLR, il va enfin pouvoir être compilé par le `F33f`_`[JIT Compiler (Just in Time)`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilation_à_la_volée]`_`f en langage natif de la machine.

Il existe trois types de JIT :

• `*Pre-JIT`* : le code entier est directement compilé ;
• `*Econo-JIT`* : le code est compilé par parties, et la mémoire libérée si nécessaire ;
• `*Normal-JIT`* : le code n'est compilé que quand c'est nécessaire, mais est ensuite placé en cache pour pouvoir être réutilisé.

Quel que soit le type de JIT, le but est d'accélérer l'exécution du code en réutilisant dès que possible le cache. Pour voir ceci visuellement, c'est très simple. Il suffit d'écrire une simple application ASP.NET (`*`F33f`_`[Hello World`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Hello_World]`_`f`* par exemple). À la première exécution, le code est compilé. Par la suite et aussi longtemps que l'application ne subit pas de modifications, le cache sera utilisé, d'où une vitesse d'exécution bien plus rapide que lors de la première exécution.

Le JIT fourni par Microsoft ne produit évidemment que du code natif Windows, mais les spécifications étant disponibles, il s'est trouvé un groupe de personnes ayant décidé de porter .NET sur `F33f`_`[Linux`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Linux]`_`f, donnant naissance à la plate-forme de développement libre `F33f`_`[Mono`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Mono_(informatique)]`_`f.

>>Liste des langages pris en charge

Les langages pris en charge par le CLR sont différents de ceux qui sont pris en charge par la `F33f`_`[DLR`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Dynamic_Language_Runtime]`_`f. Un bytecode obtenu sans utilisation d'anciennes API microsoft (MFC,win32) est appelé un `F33f`_`[code managé`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Managed_code]`_`f qui bénéficie des avantages de la plate-forme .NET (portabilité, ramasse-miettes). Le CLR prend entre autres en charge :

• `F33f`_`[C#`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=C_sharp]`_`f
• `F33f`_`[F#`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=F_Sharp]`_`f
• `F33f`_`[VB.Net`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Visual_Basic_.NET]`_`f
• `F33f`_`[PowerShell`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=PowerShell]`_`f

>>Voir aussi

>>>Articles connexes

• `*`F33f`_`[Parrot virtual machine`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Parrot_(machine_virtuelle)]`_`f`*
• `F33f`_`[Java virtual machine`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Java_virtual_machine]`_`f
• `*`F33f`_`[Metadata`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Metadata]`_`f`*
• `F33f`_`[Moteur d'exécution`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Moteur_d'exécution]`_`f
• `F33f`_`[Common Type System`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Common_Type_System]`_`f
• C++/CLI
• `F33f`_`[DLR`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Dynamic_Language_Runtime]`_`f
• `F33f`_`[Mono`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Mono_(logiciel)]`_`f

>>>Notes et références

• (fr) Vue d'ensemble du `*Common Language Runtime`* (Microsoft MSDN)

`:cite-note-1`!1.`! `F0af`_`[↑`#cite-ref-1]`_`f `*`F33f`_`[Common Type System`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Common_Type_System]`_`f`*

>>>Lien externe

• (en) C# Online.NET / `*Common Language Runtime`*

• Portail de Microsoft
• Portail de l’informatique

`c`F0af`_`[↑ Back to top`#top]`_`f`a